package com.server.store.data;

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.datastore.EntityNotFoundException;
import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Query;
import com.shared.model.Compagnie;
import com.shared.model.Garantie;
import com.shared.model.Produit;
import com.shared.model.Tarification;

/**
 * DAO de gestion des {@link Produit}
 * @author queyroi
 *
 */
public class ProduitManager extends DataManager<Produit> {
	
	static{
		ObjectifyService.register(Tarification.class);
		ObjectifyService.register(Compagnie.class);
		ObjectifyService.register(Produit.class);
		ObjectifyService.register(Garantie.class);
	}
	
	@Override
	public void delete(Produit obj) {
		Objectify ofy = ObjectifyService.beginTransaction(); 
		try{
			ofy.delete(obj);
			ofy.getTxn().commit();
		}catch(Exception e){
			if (ofy.getTxn().isActive())
		        ofy.getTxn().rollback();
		}		
	}

	@Override
	public List<Produit> getList() {
		List<Produit> listReturn = new ArrayList<Produit>();
		Objectify ofy = ObjectifyService.begin();
		Query<Produit> query = ofy.query(Produit.class);
		for(Produit p : query){
			listReturn.add(p);
		}
		return listReturn;
	}

	@Override
	public void save(Produit obj) {
		Objectify ofy = ObjectifyService.beginTransaction(); 
		try{		
			ofy.put(obj);
			ofy.getTxn().commit();
		}catch(Exception e){
			if (ofy.getTxn().isActive())
		        ofy.getTxn().rollback();
		}
		
	}

	@Override
	public void update(Produit obj) {
		Objectify ofy = ObjectifyService.beginTransaction(); 
		try{		
			ofy.put(obj);
			ofy.getTxn().commit();
		}catch(Exception e){
			if (ofy.getTxn().isActive())
		        ofy.getTxn().rollback();
		}			
	}
	
	public Compagnie getCompagnie(Produit obj) throws EntityNotFoundException{
		Objectify ofy = ObjectifyService.begin();
		return ofy.get(Compagnie.class, obj.getCompagnie().getId());		
	}

}
